int separa (int **v, int p, int r, int k)
{
    int *c = v[p];
    int i = p+1;
    int j = r;
    int *t;
    while (i <= j)
    {
        if (v[i][k] < c[k])
            ++i;
        else if (c[k] < v[j][k])
            --j;
        else
        {
            t = v[i];
            v[i] = v[j];
            v[j] = t;
            ++i; --j;
        }
    }
    t = v[p];
    v[p] = v[j];
    v[j] = t;
    return j;
}

void quick_sort(int **v, int p, int r, int k)
{
    int j;
    if (p < r)
    {
        j = separa(v, p, r, k);
        quick_sort(v, p, j-1, k); 
        quick_sort(v, j+1, r, k);
    }
}